有這幾個函數:
void free_all_register_address(void);               // 釋放
void register_address(void *address);               // 標記
void new_1d(void **ptr, int length, int type_side); // 分配
分別進行釋放、標記、分配的工作。
還有用於紀錄地址的全域變數:
void **address_pool = NULL;  //將會是一個動態陣列,儲存 void*
int index = 0; //索引,指向目前可以儲存地址的空間
標記和分配在前兩篇文章已經進行了初步的構思完善,
詳細的部分可以回去看。
所以今天要完善的是用於釋放所有被標記地址的函數,
即 free_all_register_address 。
假設所有需要釋放的地址已經經 register_address() 函數註冊、標記,
所以要釋放所有被標記地址只需要遍歷一次 address_pool。
void free_all_register_address(void) {
	/*遍歷 address_pool 的空間*/
	for (int i = 0; i < index; i++) {
		free(address_pool[i]);  //釋放曾經記錄過的記憶體地址的空間
		address_pool[i] = NULL;
	}
    /*釋放用於紀錄的空間*/
	free(address_pool);
	address_pool = NULL;
}
很簡單,兩個部分,
就是遍歷 address_pool ,釋放。
再釋放用於記錄的空間。
釋放後設為 NULL 是為了安全,原因不多說。